<?php

include_once '../entities/Grupo.php';
include_once '../entities/Alumno.php';
include_once '../entities/Inscripcion.php';
include_once '../entities/Profesor.php';

class CtlGeneral {
    
    protected $idGrupo;
    protected $idAlumno;
    
    protected function frmAlumnoGrupo ($idAlumno, $idGrupo) { ?>
        
        <form id="alumnoGrupo">
            <input type="hidden" value="<? echo "$idAlumno";?>" name="idAlumno" id="idAlumno">
            <input type="hidden" value="<? echo "$idGrupo";?>" name="idGrupo" id="idGrupo">
        </form>
    <?}
    
    protected function listarProfesoresMenu ($tipo) {
        
        //Creamos el objeto de tipo profesor
        $profesores = new Profesor();
        
        //Obtenemos de la BD la lista de profesores y modulos
        if ($tipo == "EP") {
            $listaModulosProfesores = $profesores->listarProfesores(" JOIN MODULOPROFESOR ON (pridprofesor = mopridprofesor) JOIN MODULO ON (moidmodulo = mopridmodulo) WHERE mopridgrupo = $this->idGrupo ");
            
        } else if ($tipo == "EA") {
            $listaModulosProfesores = $profesores->listarProfesores(" JOIN profesorevalfinal ON (prefidprofesor = pridprofesor) WHERE prefidgrupo = $this->idGrupo ");
            
        } else {
            $listaModulosProfesores = $profesores->listarProfesores("");
        }
        
        //Cabecera de la tabla
        $tablaEnHTML = "<script type='text/javascript'>
                        ajax('controllers/gestionarCurriculum/CtlCurriculum.php', 'certi_listar', 'vacio', 'contenido');
                </script>
            <table class='tablas_sort'><thead>
                        <tr>
                            <th>Nombre del profesor</th>". 
                            ($tipo == "EP" ? "<th>Nombre del módulo</th>" : "")
                            ."<th>Opciones</th>
                        </tr></thead><tbody>";
        
        if ($listaModulosProfesores != false) {
        
            //Recorremos los valores de la tabla
            foreach ($listaModulosProfesores as $tempModuloProfesor) {
                
                if ($tipo == "EA") {
                    $isEvaluado = new Inscripcion();
                    $isEvaluado = $isEvaluado->isAlumnoEvaluado($this->idAlumno, $this->idGrupo, $tempModuloProfesor['prefidprofesorevalfinal']);
                }

                //Mostramos cada renglón de la tabla
                $tablaEnHTML .=    
                    "<tr>
                        <td>$tempModuloProfesor[peapepat] $tempModuloProfesor[peapemat] $tempModuloProfesor[penombre]</td>".
                        ($tipo == "EP" ? "<td>$tempModuloProfesor[monombre]</td>" : "")
                        ."<td>";
                
                        if ($tipo == "EP") {
                            
                            $tablaEnHTML .= $this->verificarProfesorEvaluado($tempModuloProfesor['mopridmoduloprofesor'], $this->idAlumno, $this->idGrupo) ? "Evaluación hecha" : "<input type='button' value='Evaluar profesor'
                                onclick=\"ajaxConId('controllers/CtlEvaluarProfesores.php', 'frmRegisEval', 'alumnoGrupo', 'contenido', '$tempModuloProfesor[mopridmoduloprofesor]')\" >";
                            
                        } else if ($tipo == "EA") {
                            
                            $tablaEnHTML .= ($isEvaluado ? "Evalauación hecha" : "<input type='button' value='Ingresar evaluación realizada por este profesor'
                                onclick=\"ajaxConId('controllers/CtlEvaluarAlumnos.php', 'frmRegisEval', 'alumnoGrupo', 'contenido', '$tempModuloProfesor[prefidprofesorevalfinal]')\" >");
                            
                        } else {
                            //Para el modulo de gestionar profesor
                        }
                
                $tablaEnHTML .= "</td>
                    </tr>";
            }
        }
        
        //Cerramos la tabla
        $tablaEnHTML .= "</tbody></table><div id='verCursoTaller'></div>";
        
        return $tablaEnHTML;
    }

    protected function insertarTitulo ($textoTitulo) {
        
        return "<div class='inner-heading'>
                        <div class='container2'>
                            <div class='row'>
                                <div class='span13'>
                                    <h1 class='animated fadeInDown delay1'>$textoTitulo</h1>
                                    <p class='animated fadeInDown delay2'></p>
                                </div>
                            </div>
                        </div>
                    </div>";
    }
    
    //Función para determinar si un grupo ya cuenta con todo lo necesario para subir de nivel
    //  regresa TRUE si el grupo ha subido de nivel
    //  regresa TRUE si el grupo se ha mantenido en el mismo nivel
    //  $idGrupo: id del grupo cuyo estado se quiere checar
    protected function verificarParaSubirNivelDeGrupo ($idGrupo) {
        
        $grupo = new Grupo();
        $nivel = $grupo->obtenerPorId($idGrupo);
        $nivel = $nivel['grestado'];
        
        //Preguntamos si el grupo ya puede pasar al siguiente nivel
        if ($grupo->isEstadoCompleto($idGrupo, ($nivel + 1) )) {
            
            //Si estamos en el nivel 0 y aspiramos a subir al nivel 1, aparte de todas las tareas del grupo, verificamos tener el minimo de alumno 
            //      y todas las cartas compromiso de los profesores
            if ($nivel == 0 && $grupo->isMinimoAlumnosCumplido($idGrupo) && $grupo->isProfesoresConCartaCompromiso($idGrupo)) {
                
                //En el nivel que estamos, solo subimos uno
                $grupo->modificarEstado($idGrupo, ($nivel + 1));
                return true;
                
            //Si estamos en el nivel 3 y queremos pasar al nivel 4, aparte de verificar el total de las actividades, 
            //          verificamos que todos los alumnos halla evaluado a los profesores
            } else if ($nivel == 3 && $grupo->isAlumnosYaEvaluaron($idGrupo)) {
                //En el nivel que estamos, solo subimos uno
                $grupo->modificarEstado($idGrupo, ($nivel + 1));
                return true;
            } else {
                //En el nivel que estamos, solo subimos uno
                $grupo->modificarEstado($idGrupo, ($nivel + 1));
                return true;
            }
        } else {
            return false;
        }
    }
    
    /*El tipo puede ser:
        GI -> Gestinar inscripción opicón Menu principal
        GIR -> Gestionar inscripción opción Registrar inscripción
        GA -> Gestionar alumno opción Menu principal
        EA -> Evaluar Alumnos opción Ver alumnos inscritos al grupo
     */
    public function listarAlumnos ($tipo) {
        
        //Creamos el objeto de tipo Alumno
        $alumnos = new Alumno();
        $grupo = new Grupo();
        
        //Obtenemos de la BD la lista de alumnos
            //Si es de Gestionar Inscripcion, añadimos INSCRIPION, GRUPO (NO CANCELADOS NI FINALIZADOS), HORARIO y CURSOTALLER
                //Esto se hace porque el Alumno puede estar inscrito en más de un grupo (activo) a la vez
        if ($tipo ==  'GI') {
            $listaAlumnos = $alumnos->listarAlumnos("JOIN inscripcion ON (alidalumno = inidalumno) 
                                                    JOIN grupo ON (inidgrupo = gridgrupo) 
                                                    JOIN horario ON (gridgrupo = hoidgrupo) 
                                                    JOIN cursotaller ON (gridcursotaller = cutaidcursotaller) 
                                                        WHERE grEstado != '4' AND grEstado != 'X'");
            
            //Si es de Gestionar Inscripcion-> REGISTRAR INSCRIPION, son todos los alumnos que NO esten inscritos en el grupo
                //El id del grupo fue asignado en la clase CtlInscripcion en la opción (del switch) frmRegisInscrip2, es una ATRIBUTO de esta clase CtlGeneral
        } else if ($tipo ==  'GIR') {
            $listaAlumnos = $alumnos->listarAlumnos("EXCEPT
                                                        (SELECT persona.*, alumno.* FROM PERSONA JOIN ALUMNO ON (peIdPersona=alIdPersona)
                                                                                        JOIN INSCRIPCION ON (alIdAlumno = inIdAlumno) 
                                                                                        WHERE inIdGrupo = $this->idGrupo)");
        } else if ($tipo == 'EA') {
            $listaAlumnos = $alumnos->listarAlumnos(" JOIN INSCRIPCION ON (inidalumno = alidalumno) WHERE inidgrupo = $this->idGrupo ");
            
        } else {
            $listaAlumnos = $alumnos->listarAlumnos("");
        }
        
        //Cabecera de la tabla
        $tablaEnHTML = "<script type='text/javascript'>
                        ajax('controllers/gestionarCurriculum/CtlCurriculum.php', 'certi_listar', 'vacio', 'contenido');
                </script>
                <table class='tablas_sort' style='width:100%'><thead>
                        <tr>".
                            ($tipo == 'GI' ? "<th>Curso/Taller</th><th>Horario</th>" : "") 
                            ."<th>Nombre</th>
                            <th>No. Folio</th>
                            <!-- <th>No. Cta.</th> -->
                            <th>Fec. de <br>nacimiento</th>
                            <th>Correo</th>
                            <th>Opciones</th>
                        </tr></thead><tbody>";
        
        //Recorremos los valores de la tabla
        if ($listaAlumnos != false) {
            
            foreach ($listaAlumnos as $alumno) {
                
                if ($tipo != 'EA' || !$this->encontrarFile($this->generarNombresClaves($alumno['alidalumno'], $this->idGrupo), "DP")) {
                
                    $correo = new Alumno(); $correo = $correo->obtenerMedio($alumno['peidpersona'], 'm');

                    //Solo aplica para Gestionar inscripción, obtenemos el horario del grupo y le damos formato
                    if ($tipo == 'GI') {
                        //Obtenemos el horario
                        $horario = $grupo->obtenerHorario($alumno['gridgrupo']);
                        $horario = $this->obtenerDiasALetras($horario['hodia']) . "<br>" . $horario['hohoraini'] . "-" . $horario['hohorafin'];
                    }

                    //Mostramos cada renglón de la tabla
                    $tablaEnHTML .=    
                        "<tr>".
                                ($tipo == 'GI' ? "<td>$alumno[cutanombre] $alumno[gridgrupo]/". (date_format(date_create($alumno['grfecini']), 'Y')) ."</td><td>$horario</td>" : "") 
                            ."<td>$alumno[peapepat] $alumno[peapemat] $alumno[penombre]</td>
                            <td>$alumno[alfolio]</td>
                            <!-- <td>$alumno[alnumcuenta]</td> -->
                            <td>". date_format(date_create($alumno['alfecnac']), 'd-m-Y') ."</td>
                            <td>$correo[mecomedio]</td>
                            <td>".
                            ($tipo == 'GIR' ? //Afirmación
                                "<input type='button' value='Inscribir'
                                    onclick=\"ajaxConId('controllers/CtlInscripcion.php', 'frmRegisInscrip3', 'frmInscr', 'contenido', '$alumno[alidalumno]')\" >" 
                            : "").
                            ( $tipo == 'GA' ?  //Afirmación
                                ("<input type='button' value='Ver Detalles'
                                    onclick=\"ajaxConId('controllers/CtlGestionAlumnos.php', 'frmDetallesAlumno', 'vacio', 'contenido', '$alumno[alidalumno]')\" >".    
                                "<input type='button' value='Modificar'
                                    onclick=\"ajaxConId('controllers/CtlGestionAlumnos.php', 'frmModificarAlumno', 'vacio', 'contenido', '$alumno[alidalumno]')\" >") 
                            : "").
                            ( $tipo == 'EA' ?  //Afirmación
                                ("<input type='button' value='Evaluar Alumno' 
                                    onclick=\"ajaxConId('controllers/CtlEvaluarAlumnos.php', 'listarProfe', 'alumnoGrupo', 'contenido', '$alumno[alidalumno]')\" >")
                            : "").
                            ($tipo == 'GI' ? //Afirmación
                                    "<input type='button' value='Ver Detalles'
                                    onclick=\"ajaxConId('controllers/CtlInscripcion.php', 'frmDetallesInscrip', 'vacio', 'contenido', '$alumno[inidinscripcion]')\" >"
                            : "")
                            ."</td>
                        </tr>";
                }
            }
        }
        //Cerramos la tabla
        $tablaEnHTML .= "</tbody></table>";
        
        return $tablaEnHTML;
    }
    
    /* Lalo
     * Función para generar de grupos del CU Gestionar grupos
        @param 
        $estado: estado de los grupos que se quiere listar*/
     protected function listarGrupos ($tipo) {
        
        //Creamos el objeto de tipo Grupo
        $grupos = new Grupo();
        
        if ($tipo == 'GG' || $tipo == 'GI') {
            $listaGrupos = $grupos->listarGrupos("WHERE grEstado != '4' AND grEstado != 'X'");
            
        } else if ($tipo == "EP") {
            $listaGrupos = $grupos->listarGrupos(" JOIN INSCRIPCION ON (inidgrupo = gridgrupo) WHERE inidalumno = $this->idAlumno");
            
        } else if ($tipo == "EA") {
            $listaGrupos = $grupos->listarGrupos(" WHERE grEstado != '4' AND grEstado != 'X' AND cutatipo = 'N' ");
            
        } else {
            $listaGrupos = $grupos->listarGrupos("");
        }
        
        //Cabecera de la tabla
        $tablaEnHTML = "<script type='text/javascript'>
                        ajax('controllers/gestionarCurriculum/CtlCurriculum.php', 'certi_listar', 'vacio', 'contenido');
                </script>
                <table class='tablas_sort'><thead>
                        <tr>
                            <th>Curso/Taller</th>
                            <th>Estado</th>
                            <th width='100'>Fec. <br> de inicio</th>
                            <th>Fec. de <br>terminó</th>
                            <th>Horario</th>
                            <th>Opciones</th>
                        </tr></thead><tbody>";
        //Variable que almacena el estado del grupo
        $estado = "";
        
        //Recorremos los valores de la tabla
        if ($listaGrupos != false) foreach ($listaGrupos as $grupo) {
            
            switch ($grupo['grestado']) {
                
                case '0': $estado = 'Registrado';
                    break;
                
                case '1': $estado = 'Listo para <br>iniciar';
                    break;
                
                case '2': $estado = 'Iniciado';
                    break;
                
                case '3': $estado = 'Por cerrar';
                    break;
                
                case '4': $estado = 'Finalizado';
                    break;
                
                case 'X': $estado = 'Cancelado';
                    break;
                
                default : $estado = 'No definido';
            }
            
            //Obtenemos el horario
            $horario = $grupos->obtenerHorario($grupo['gridgrupo']);
            $horario = $this->obtenerDiasALetras($horario['hodia']) . "<br>" . $horario['hohoraini'] . " - " . $horario['hohorafin'];
            
            //Mostramos cada renglón de la tabla
            $tablaEnHTML .=    
                "<tr>
                    <td>$grupo[cutanombre] $grupo[gridgrupo]/". (date_format(date_create($grupo['grfecini']), 'Y')) ."</td>
                    <td>$estado</td>
                    <td>". date_format(date_create($grupo['grfecini']), 'd-m-Y') ."</td>
                    <td>". date_format(date_create($grupo['grfecfin']), 'd-m-Y') ."</td>
                    <td>$horario</td>
                    <td>".
                        //En caso de ser para gestionar grupos
                        ( ($tipo == 'GG' || $tipo == 'GGT' ) ? "<input type='button' value='Ver Detalles'
                            onclick=\"ajaxConId('controllers/CtlGestionGrupos.php', 'frmDetallesGrupo', 'vacio', 'contenido', '$grupo[gridgrupo]')\" >" : "").
                    
                        ( ($tipo == 'GG' || $tipo == 'GGT' ) && $grupo['grestado'] != '4' && $grupo['grestado'] != 'X' ? "<input type='button' value='Modificar'
                            onclick=\"ajaxConId('controllers/CtlGestionGrupos.php', 'frmModificarGrupo', 'vacio', 'contenido', '$grupo[gridgrupo]')\" >" : "").
                    
                        ( ($tipo == 'GG' || $tipo == 'GGT' ) && $grupo['grestado'] != '4' && $grupo['grestado'] != 'X' ? "<input type='button' value='Generar Comunicados' 
                            onclick=\"ajaxConId('controllers/CtlGestionGrupos.php', 'menuComunAnexos', 'vacio', 'contenido', '$grupo[gridgrupo]')\">" : "").
            
                            //Solo se muestra para los grupos de tipo negocio (con evaluación final de proyecto)
                        ( ($tipo == 'GG' || $tipo == 'GGT' ) && $grupo['grestado'] != '4' && $grupo['grestado'] != 'X' && $grupo['cutatipo'] == "N" ? "<input type='button' value='Profesores de evaluaciones finales'
                            onclick=\"ajaxConId('controllers/CtlGestionGrupos.php', 'menuProfEvalFinal', 'vacio', 'contenido', '$grupo[gridgrupo]')\" >" : "").
                            
                        //En caso de ser para evaluar profesores 
                        ( ($tipo == 'EP') && $grupo['grestado'] != 'X' ? "<input type='button' value='Ver profesores'
                            onclick=\"ajaxConId('controllers/CtlEvaluarProfesores.php', 'listarProfesores', 'alumnoGrupo', 'contenido', '$grupo[gridgrupo]')\" >" : "").
                    
                        //En caso de ser para evaluar profesores 
                        ( ($tipo == 'EA') && $grupo['grestado'] != 'X' ? "<input type='button' value='Ver Alumnos'
                            onclick=\"ajaxConId('controllers/CtlEvaluarAlumnos.php', 'verAlumnos', 'vacio', 'contenido', '$grupo[gridgrupo]')\" >" : "").
                    
                        //En caso de ser para gestionar inscripciones
                        ($tipo == 'GI' && $grupo['grestado'] != '4' && $grupo['grestado'] != 'X' ? "<input type='button' value='Inscribir aquí'
                            onclick=\"ajaxConId('controllers/CtlInscripcion.php', 'frmRegisInscrip2', 'vacio', 'contenido', '$grupo[gridgrupo]')\" >" : "")."
                    </td>
                </tr>";
            
            /*                        ( ($tipo == 'GG' || $tipo == 'GGT' ) && $grupo['grestado'] != '4' && $grupo['grestado'] != 'X' ? "<a href='controllers/CtlGestionGrupos.php?opc=comunPago&id=$grupo[gridgrupo]' 
                            target='_blank'><input type='button' value='Generar Comunicados'></a>" : ""). */
        }
        //Cerramos la tabla
        $tablaEnHTML .= "</tbody></table>";
        
        return $tablaEnHTML;
    }
    
    public function obtenerDiasALetras ($diasNum) {
        
        $dias = explode("-", $diasNum);
        
        $cad = "";
        
        foreach ($dias as $dia) {
            
            switch ($dia) {
            
                case '1': $cad .= "L-";
                    break;

                case '2': $cad .= 'M-';
                    break;

                case '3': $cad .= 'MC-';
                    break;

                case '4': $cad .= 'J-';
                    break;

                case '5': $cad .= 'V-';
                    break;

                case '6': $cad .= 'S-';
                    break;
            }   
        }      
        return $cad;
    }
    
    public function obtenerDiasAPalabras ($diasNum) {
        
        $dias = explode("-", $diasNum);
        
        $cad = "";
        
        $eCont = 1;
        
        foreach ($dias as $dia) {
            
            switch ($dia) {
            
                case '1': $cad .= "Lunes";
                    break;

                case '2': $cad .= 'Martes';
                    break;

                case '3': $cad .= 'Miercoles';
                    break;

                case '4': $cad .= 'Jueves';
                    break;

                case '5': $cad .= 'Viernes';
                    break;

                case '6': $cad .= 'Sabado';
                    break;
            }   
            
            if ( $eCont == (count($dias) - 2) ) {
                $cad .= " y ";
            } else if ($eCont < (count($dias) - 2) ) {
                $cad .= ", ";
            }
            $eCont++;
        }      
        return $cad;
    }
    
    public function verificarProfesorEvaluado ($idModuloProfesor, $idAlumno, $idGrupo) {
        $inscrip = new Inscripcion();
        
        return $inscrip->isProfesorEvaluado($idModuloProfesor, $idAlumno, $idGrupo);
    }
    
    public function generarNombresClaves ($idAlumno, $idGrupo) {
        
        //Generamos la cadena de los archivos subidos, se compone del ID del grupo y del alumno
        //se arma para tener una cadena de 12 digitos, cada id tiene que tener 6 digitos
        $cadFolio = "";
        
        if ($idGrupo < 10) {
                
            $cadFolio .= "00000".$idGrupo ;
        } else if ($idGrupo  < 100) {

            $cadFolio .= "0000".$idGrupo ;
        } else if ($idGrupo  < 1000) {

            $cadFolio .= "000".$idGrupo;
        } else if ($idGrupo  < 10000) {

            $cadFolio .= "00".$idGrupo;
        } else if ($idGrupo  < 100000) {

            $cadFolio .= "0".$idGrupo ;
        } else {
            $cadFolio .= $idGrupo ;
        }
        
        if ($idAlumno < 10) {
                
            $cadFolio .= "00000".$idAlumno ;
        } else if ($idAlumno  < 100) {

            $cadFolio .= "0000".$idAlumno ;
        } else if ($idAlumno  < 1000) {

            $cadFolio .= "000".$idAlumno ;
        } else if ($idAlumno  < 10000) {

            $cadFolio .= "00".$idAlumno ;
        } else if ($idAlumno  < 100000) {

            $cadFolio .= "0".$idAlumno ;
        } else {
            $cadFolio .= $idAlumno ;
        }

        return $cadFolio;
    }
    
    public function encontrarFile ($nameFile, $claseArchivo) {
        
        $claseArchivo = ( $claseArchivo == "U" ? "constaUNAM" : ($claseArchivo == "P" ? "pagosInscrp" : ($claseArchivo == "C" ? "cartasCompro" : ($claseArchivo == "I" ? "identiOfici" : "devolPagos"))) );
        
        if (file_exists("../docs/$claseArchivo/". $nameFile .".jpg")) {
            
            return $nameFile .".jpg";
        } else if (file_exists("../docs/$claseArchivo/". $nameFile .".pdf")) {
            
            return $nameFile .".pdf";
        } else if (file_exists("../docs/$claseArchivo/". $nameFile .".jpeg")) {
            
            return $nameFile .".jpeg";
        } else if (file_exists("../docs/$claseArchivo/". $nameFile .".png")) {
            
            return $nameFile .".png";
        }
        return false;
    }
}

?>